#include<stdio.h>

void CopyFile(const char*destFile,const char* srcFile)
{
    FILE* fdest = fopen(destFile,"w");
    if(fdest == NULL)
    {
        return;
    }

    FILE* fsrc = fopen(srcFile,"r");
    if(fsrc == NULL)
    {
        return;
    }

    char c = 0;
    while((c = getc(fsrc)) != EOF)
    {
        fputc(c,fdest);
    }
    fclose(fdest);
    fclose(fsrc);
}

struct student
{
    int id;
    char name[16];
};


int main()
{
    // FILE 文件指针
    // fopen()  打开一个文件
    // 以最小权限打开
    // modes:模式
    // r只读，文件不存在打开失败
    // w只写，文件不存在就创建,如果存在删除内容
    // a追加写，文件不存在就创建
    // r+ w+ a+
//     FILE* f = fopen("./1.txt","r");
//     if(f == NULL)
//     {
//         printf("文件打开失败!\n");
//         return -1;
//     }
//     printf("文件打开成功!\n");
// // 读一个字符
//     // char c = fgetc(f);
//     // printf("%c\n",c);

// // 文件的终止符  EOF
//     char c = 0;
//     while((c = fgetc(f)) != EOF)
//     {
//         printf("%c",c);
//     }
//     printf("\n");

//     fclose(f);//关闭文件指针(归还文件描述符)



    // FILE* f = fopen("./1.txt","w");
    // if(f == NULL)
    // {
    //     printf("文件打开失败!\n");
    //     return -1;
    // }
    // printf("文件打开成功!\n");

    // // 往里面写一个字符
    // fputc('h',f);
    // fputc('e',f);
    // fputc('l',f);
    // fputc('l',f);
    // fputc('o',f);
    
    // fclose(f);

    // CopyFile("test.txt","IO编程");




    // FILE* f = fopen("./1.txt","r");
    // if(f == NULL)
    // {
    //     printf("文件打开失败!\n");
    //     return -1;
    // }
    // printf("文件打开成功!\n");

    // // 读一个字符串,读到\n结束
    // // 读取完后会默认在末尾添加\0，所以能读到的字符数量是n-1
    // // n是fgets 中间的参数
    // char s[100]={0};
    
    // fgets(s,100,f);
    // printf("%s\n",s);
    // fclose(f);

    // FILE* f = fopen("./1.txt","w");
    // if(f == NULL)
    // {
    //     printf("文件打开失败!\n");
    //     return -1;
    // }
    // printf("文件打开成功!\n");
    
    // fputs("helloworld",f);
    // fclose(f);


    // FILE* f = fopen("./1.txt","r");
    // if(f == NULL)
    // {
    //     printf("文件打开失败!\n");
    //     return -1;
    // }

    // char s[1024] = {0};
    // fread(s,1024,1,f);
    // printf("%s\n",s);

    // fclose(f);



    // FILE* f = fopen("./1.txt","w");
    // if(f == NULL)
    // {
    //     printf("文件打开失败!\n");
    //     return -1;
    // }
    
    // struct student s = {1,"zhangsan"};

    // fwrite(&s,sizeof(s),1,f);
    // fclose(f);


    // FILE* f = fopen("./1.txt","r");
    // if(f == NULL)
    // {
    //     printf("文件打开失败!\n");
    //     return -1;
    // }
    
    // struct student s ;

    // fread(&s,sizeof(s),1,f);
    // printf("%d %s\n",s.id,s.name);
    // fclose(f);

    // 格式化读写
    // FILE *f = fopen("1.txt","w");
    // struct student s ={1,"zhangsan"};
    // fprintf(f,"id=%d name=%s",s.id,s.name);
    // fclose(f);

    // FILE *f = fopen("1.txt","r");
    // struct student s ;
    // fscanf(f,"id=%d name=%s",&s.id,s.name);
    // printf("%d %s\n",s.id,s.name);
    // fclose(f);

    // FILE *f = fopen("1.txt","a");
    // struct student s ={1,"zhangsan"};
    // fputc('\n',f);
    // fprintf(f,"id=%d name=%s",s.id,s.name);
    // fclose(f);

    // 随机读写
    // 移动光标
    // FILE* f = fopen("1.txt","r");
    // char str[100] = {0};
    
    // fseek(f,0,SEEK_END);//这个可以把光标放到结束位置
    
    // printf("%ld\n",ftell(f));//显示光标当前位置距离开始有多少偏移量

    // rewind(f);//把光标移到文件开头

    // fread(str,100,1,f);

    // printf("%s\n",str);
    // fclose(f);



//    1.程序结束的时候，自动输出缓冲区的数据
//    2.遇到\n输出
//    3.1024字节  ：linux缓冲区的默认大小

//    4.手动刷新缓冲区：fflush

    // for(int i=0;i<200;i++)
    // {
    //     printf("%4d",i);
    // }
    // fflush(stdout);
    // while(1)
    // {

    // }
    
    FILE* f = fopen("1.txt","a");
    while(1)
    {
        char s[100]={0};
        scanf("%s",s);
        fprintf(f,"%s\n",s);
        fflush(f);
    }
    fclose(f);
    return 0;
}